/**
 * 类名：LogUtil
 * @author hmb
 * 创建日期： 2014-10-1 上午12:12:53
 *
 * 备注：日志工具类，配置文件为log4j.properties。
 * 使用方式：可以通过getLogger静态方法获取logger对象，操作该对象来打印信息
 * 			（推荐使用getLogger(Class)这种方式）；也可以使用定义好的debug()等静态方法直接打印。
 * 建议：有打印输出信息需求的地方都使用这个工具类，取代system.out.print和e.prinStack。
 * 
 */
package com.erms.util;

import org.apache.log4j.Logger;

/**
 * @author hmb
 * 
 */
public class LogUtil {

	/**
	 * 获取日志根对象，输出日志时不带类信息（不推荐）。
	 * 可以直接调用本类封装好便捷的静态输出方法，而不需要获取日志对象
	 * 
	 * @return 日志根对象
	 */
	public static Logger getLogger() {

		return Logger.getLogger("erms");
	}

	/**
	 * 根据类名获取日志对象，输出日志时带有类信息（推荐）。
	 * 也可以直接调用本类封装好便捷的静态输出方法，而不需要获取日志对象
	 * 
	 * @param className 类
	 * @return 日志对象
	 */
	public static Logger getLogger(Class<?> className) {

		return Logger.getLogger(className);
	}

	/**
	 * 分割线，用于区分输出块，放在块尾
	 */
	public static void divide() {

		getLogger().debug("--------------------------------------------------");
	}

	/**
	 * 带标题的分割线，用于区分输出块，放在块头
	 * 
	 * @param title
	 */
	public static void divide(String title) {

		String divide = "--------------------------------------------------";
		int length = 50 - title.length();
		if (length < 0) {
			divide = "---";
		} else {
			divide = divide.substring(0, length / 2);
		}
		getLogger().debug(divide + title + divide);
	}

	// --------------------------------使用根Logger--------------------------
	public static void fatal(String msg) {

		getLogger().fatal(msg);
	}

	public static void error(String message) {

		getLogger().error(message);
	}

	public static void warn(String message) {

		getLogger().warn(message);
	}

	public static void info(String message) {

		getLogger().info(message);
	}

	public static void debug(String message) {

		getLogger().debug(message);
	}

	// -------------------------------带有异常信息的---------------------------
	public static void fatal(String message, Exception e) {

		getLogger().fatal(message,e);
	}

	public static void error(String message, Exception e) {

		getLogger().error(message,e);
	}

	public static void warn(String message, Exception e) {

		getLogger().warn(message,e);
	}

	public static void info(String message, Exception e) {

		getLogger().info(message,e);
	}

	public static void debug(String message, Exception e) {

		getLogger().debug(message,e);
	}

	// -----------------------------通过类名实例化的Logger--------------------
	public static void fatal(Class<?> className, String msg) {

		getLogger(className).fatal(msg);
	}

	public static void error(Class<?> className, String message) {

		getLogger(className).error(message);
	}

	public static void warn(Class<?> className, String message) {

		getLogger(className).warn(message);
	}

	public static void info(Class<?> className, String message) {

		getLogger(className).info(message);
	}

	public static void debug(Class<?> className, String message) {

		getLogger(className).debug(message);
	}

	// ----------------------------带有异常信息的-----------------------------
	public static void fatal(Class<?> className, String message, Exception e) {

		getLogger(className).fatal(message,e);
	}

	public static void error(Class<?> className, String message, Exception e) {

		getLogger(className).error(message,e);
	}

	public static void warn(Class<?> className, String message, Exception e) {

		getLogger(className).warn(message,e);
	}

	public static void info(Class<?> className, String message, Exception e) {

		getLogger(className).info(message,e);
	}

	public static void debug(Class<?> className, String message, Exception e) {

		getLogger(className).debug(message,e);
	}

	public static void main(String[] args) {

		LogUtil.divide("test log system");
		LogUtil.debug(LogUtil.class, "hello world! 你好，世界");
		LogUtil.divide();
	}
}
